#  -*- coding:utf-8 -*- 
"""
@ author: 罗金盛
@ time: 2024/3/6 
@ file: 16.协程异步.py

"""
# 协程：理解成一个个任务 没有并发起来的任务 协程本身不会多个并发，需要我们包装成任务
# 异步：利用IO等待时间去执行其他任务 （请求网页）

import asyncio

# 函数前面+async 实际调用函数的时候前面+await
async def num(name):
    print('{} start'.format(name))
    await asyncio.sleep(2)
    print('{} end'.format(name))

async def main():
    # 包装任务（简单->asyncio.gather(*tasks) 里面的tasks必须带*）
    # tasks = [num('1'), num('2'), num('3')]

    # await asyncio.gather(*tasks)

    # 包装任务（繁->asyncio.wait(tasks)里面的tasks不用带*）
    tasks = [asyncio.create_task(num(1)),asyncio.create_task(num(2)),asyncio.create_task(num(3))]

    await asyncio.wait(tasks)

if __name__ == '__main__':
    # 声明协程对象 并不会直接执行
    # await运行协程任务 不用tasks就会等待 会一直阻塞到任务结果返回 除非我们自己把他们包装成任务tasks

    asyncio.run(main())













